/*
 * Universidad del Valle de Guatemala
 * Algoritmos y Estructuras de Datos
 * Rodrigo Mejia
 * Maria Fernanda Martinez
 * Carol Solares
 */

package hojatrabajo1;



public class Radio2 implements iRadio {
   
   //Declaracion de las variables a usar.
   private boolean Power;
   private boolean Signal;
   private float Freq;
   float[] Freqfm = new float[13];
   float[] Freqam = new float[13];
   
  //Constructor de nuestra clase Radio.
   public Radio2(){
       //Inicializamos la memoria.
       for(int f = 0; f < 13;f++)
           Freqfm[f] = 87.9f;
       for(int g = 0; g < 13;g++)
           Freqam[g] = 530f;
   }
   
    /* 
     * Enciende o apaga el Radio.
     * Retorna true si el radio se enciendió, o false si el
     * radio se apagó.
     */
    @Override
    public boolean Power() {
        if(Power == false){
            Power = true;
            return true;
        }else if(Power == true){
            Power = false;
            return false;
        }else{
            return true;
        }
    }
    /* 
     * Cambia la señal de AM a FM o viceversa.
     * Retorna true si la banda es AM y false si es FM.
     */
    @Override
    public boolean ChangeSignal() {
        if(!Signal){
            Signal = true;
            Freq = 530;
        }else{
            Signal = false;
            Freq = 87.9f;
        }
        return Signal;
    }

    /* 
     * Adelanta la frecuencia a la siguiente posible.
     * Retorna la frecuencia actual.
     */
    @Override
    public float NextFreq() {
       boolean a = this.IsAm();
       if (a == false){
           if(Freq >= 107.8f){
               Freq = 87.9f;
           }else{
               Freq = Freq + .2f;
           }
       }else{
           if(Freq == 1610){
               Freq = 530;
           }
           else{
               Freq = Freq + 10;
           }
       }
       return Freq;
    }

    /*
     * Graba la frecuencia actual en el botón dado. Existen 
     * 12 posiciones disponibles de memoria por cada Banda.
     * @return True si la operación fue exitosa, false en caso contrario.
     */
    @Override
    public boolean SaveFreq(int Boton) {
        float b = this.GetFreq();
        boolean d = this.IsAm();
        if(d == false){
            Freqfm[Boton] = b;
            return true;
        }else{
            Freqam[Boton] = b;
            return true;
        }
        
    }

    /*
     * Cambia la estación a la grabada en el botón dado. Devuelve la estación
     * actual que se escucha. Existen únicamente 12 posiciones de memoria.
     * Retorna la frecuencia que estaba guar
     */
    @Override
    public float ChangeTune(int Boton) {
        boolean d = this.IsAm();
        if(d == false){
            Freq = Freqfm[Boton];
        }
        else {
            Freq = Freqam[Boton];
        }
        return Freq;
    }

    /*
     * Retorna True si la radio está encendida, false en caso contrario.
     */ 
    @Override
    public boolean IsOn() {
        if(Power == false){
            return false;
        }else{
            return true;
        }
    }

    /*
     * Retorna True si la banda es AM, y false si es FM.
     */
    @Override
    public boolean IsAm() {
        if(Signal == false){
            return false;
        }else if(Signal == true){
            return true;
        }
        else{
            return false;
        }
    }

    /*
     * Retorna la frecuencia actual a la que está sintonizada la radio.
     */
    @Override
    public float GetFreq() {
        return Freq;
    }
    
}
